package com.shenhao.hpfa.properties;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@Slf4j
@Getter
@Setter
@ToString
@ConfigurationProperties(prefix = "hpfa.device")
public class HpfaProperties {

    private boolean enabled = false;

    /**
     * 是否在通讯完成后断开连接
     */
    private boolean disconnectAfterCommunication = true;

    /**
     * 自动重连
     */
    private boolean autoReconnect = false;

    /**
     * 空闲超时设置
     */
    @NestedConfigurationProperty
    private IdleTimeoutSetting idleTimeout = new IdleTimeoutSetting();

    private String defaultDeviceSn;

    /**
     * 多控制器配置列表
     */
    private List<ControllerConfig> controllers = new ArrayList<>();

    /**
     * 控制器配置缓存，用于快速查找
     */
    private Map<String, ControllerConfig> controllerMap = new ConcurrentHashMap<>();

    /**
     * 初始化控制器映射
     */
    public void initControllerMap() {
        // 清空现有映射
        controllerMap.clear();

        // 如果没有配置控制器，则使用默认配置创建一个
        if (controllers.isEmpty() && enabled) {
            log.error("灯控装置已启用,但是没有对应的控制器配置");
            throw new IllegalArgumentException("未配置灯控的配置信息");
        }

        // 将所有控制器添加到映射中
        for (ControllerConfig config : controllers) {
            controllerMap.put(config.getDeviceSn(), config);
        }
    }

    /**
     * 获取控制器配置
     *
     * @param deviceSn 控制器sn
     * @return 控制器配置
     */
    public ControllerConfig getController(String deviceSn) {
        return controllerMap.get(deviceSn);
    }
}
